Use case: I2C communication in DMA mode ¶
This use case shows how to handle master and slave transmit/receive using DMA.
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
#define I2C_ADDRESS 0x30F;
HAL_I2C_Master_Transmit_DMA(&hi2c2, 0x30F, aTxBuffer, 128);
HAL_I2C_Master_Receive_DMA(&hi2c2, 0x30F,aRxBuffer, 128);
HAL_I2C_Slave_Receive_DMA(&hi2c2, aRxBuffer, 128);
HAL_I2C_Slave_Transmit_DMA(&hi2c2, aTxBuffer, 128);
|
#define I2C_ADDRESS 0x30F;
HAL_I2C_MASTER_Transmit_DMA(&hi2cx, 0x30F, TxBuffer, NumData);
HAL_I2C_MASTER_Receive_DMA(&hi2cx, I2C_SlaveAddress[Adr_Idx], RxBuffer, NumData);
HAL_I2C_SLAVE_Receive_DMA(&hi2cx, RxBuffer, NumData);
HAL_I2C_SLAVE_Transmit_DMA(&hi2cx, TxBuffer, NumData);
|
Key changes ¶
HAL2 uses renamed I2C DMA APIs (for example, HAL_I2C_MASTER_Transmit_DMA() instead of HAL_I2C_Master_Transmit_DMA()).

![@startuml
participant "User Application" as App
participant "HAL I2C" as HAL_I2C
== Master Transmit DMA ==
App -> HAL_I2C: HAL_I2C_MASTER_Transmit_DMA(&hi2cx, 0x30F, TxBuffer, NumData)
== Master Receive DMA ==
App -> HAL_I2C: HAL_I2C_MASTER_Receive_DMA(&hi2cx, I2C_SlaveAddress[Adr_Idx], RxBuffer, NumData)
== Slave Receive DMA ==
App -> HAL_I2C: HAL_I2C_SLAVE_Receive_DMA(&hi2cx, RxBuffer, NumData)
== Slave Transmit DMA ==
App -> HAL_I2C: HAL_I2C_SLAVE_Transmit_DMA(&hi2cx, TxBuffer, NumData)
@enduml](../../../../../_images/plantuml-4dfaccd73f2c02bbb7c76888038202041352a1c8.png)